home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -in_the_mag- / emulation / amiga / uae-0.7.0b2 / src / od-amiga / sound.h < prev   
C/C++ Source or Header  |  1998-01-20  |  2KB  |  81 lines

  1.  /* 
  2.   * UAE - The Un*x Amiga Emulator
  3.   * 
  4.   * Support for Amiga audio.device sound
  5.   * 
  6.   * Copyright 1996, 1997 Samuel Devulder
  7.   */
  8.  
  9. #include <proto/exec.h>
  10. #include <proto/dos.h>
  11. #ifndef __SASC
  12. #include <proto/alib.h>
  13. #endif
  14.  
  15. #include <exec/memory.h>
  16. #include <exec/devices.h>
  17. #include <exec/io.h>
  18.  
  19. #include <graphics/gfxbase.h>
  20. #include <devices/timer.h>
  21. #include <devices/audio.h>
  22.  
  23. extern char whichchannel[];
  24. extern struct IOAudio *AudioIO;
  25. extern struct MsgPort *AudioMP;
  26. extern struct Message *AudioMSG;
  27.  
  28. extern unsigned char *buffers[2];
  29. extern uae_u16 *sndbuffer, *sndbufpt;
  30. extern int bufidx, devopen;
  31. extern int sndbufsize;
  32.  
  33. extern int have_sound, clockval, oldledstate, period;
  34.  
  35. extern ULONG AUDIO_FILE;
  36.  
  37. static __inline__ void flush_sound_buffer(void)
  38. {
  39.     if(AUDIO_FILE) {
  40.         Write(AUDIO_FILE, buffers[bufidx], sndbufsize);
  41.     } else {
  42.     static char IOSent = 0;
  43.  
  44.     AudioIO->ioa_Request.io_Command = CMD_WRITE;
  45.     AudioIO->ioa_Request.io_Flags   = ADIOF_PERVOL|IOF_QUICK;
  46.     AudioIO->ioa_Data               = (uae_s8 *)buffers[bufidx];
  47.     AudioIO->ioa_Length             = sndbufsize;
  48.     AudioIO->ioa_Period             = period;
  49.     AudioIO->ioa_Volume             = 64;
  50.     AudioIO->ioa_Cycles             = 1;
  51.  
  52.     if(IOSent) WaitIO((void*)AudioIO); else IOSent=1;
  53.     BeginIO((void*)AudioIO);
  54.  
  55.     /* double buffering */
  56.     bufidx = 1 - bufidx;
  57.     sndbuffer = sndbufpt = (uae_u16*)buffers[bufidx];
  58.     }
  59. }
  60.  
  61. static __inline__ void check_sound_buffers (void)
  62. {
  63.     if ((char *)sndbufpt - (char *)sndbuffer >= sndbufsize) {
  64.     flush_sound_buffer();
  65.     }
  66. }
  67.  
  68. #define PUT_SOUND_BYTE(b) do { *(uae_u8 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 1); } while (0)
  69. #define PUT_SOUND_WORD(b) do { *(uae_u16 *)sndbufpt = b; sndbufpt = (uae_u16 *)(((uae_u8 *)sndbufpt) + 2); } while (0)
  70. #define SOUND16_BASE_VAL 0
  71. #define SOUND8_BASE_VAL 0
  72.  
  73. #define DEFAULT_SOUND_MAXB 8192
  74. #define DEFAULT_SOUND_MINB 8192
  75. #define DEFAULT_SOUND_BITS 16
  76. #define DEFAULT_SOUND_FREQ 11025
  77.  
  78. #define UNSUPPORTED_OPTION_b
  79.  
  80. #undef DONT_WANT_SOUND
  81.